from django.contrib import admin
from AirWeb.models import AirData, Warn, Check
from django.http import HttpResponse
from openpyxl import Workbook
from AirWeb import models


# Register your models here.


class AirDataAdmin(admin.ModelAdmin):
    list_display = ["date", "pm25", "aqi", "pm10", "so2", "no2", "o3",
                    "co", "city", "status"]
    list_per_page = 30
    search_fields = ["date", "city"]
    list_filter = ["status", "city"]

    def export_as_excel(self, request, queryset):
        print("queryset", queryset)
        meta = self.model._meta  # 用于定义文件名, 格式为: app名.模型类名
        print("meta", meta)
        field_names = [field.name for field in meta.fields]  # 模型所有字段名

        response = HttpResponse(content_type='application/msexcel')  # 定义响应内容类型
        response['Content-Disposition'] = f'attachment; filename={meta}.xlsx'  # 定义响应数据格式
        wb = Workbook()  # 新建Workbook
        ws = wb.active  # 使用当前活动的Sheet表
        ws.append(field_names)  # 将模型字段名作为标题写入第一行
        for obj in queryset:  # 遍历选择的对象列表
            print(obj)
            for field in field_names:
                data = [f'{getattr(obj, field)}' for field in field_names]  # 将模型属性值的文本格式组成列表

            ws.append(data)  # 写入模型属性值
        wb.save(response)  # 将数据存入响应内容
        return response

    export_as_excel.short_description = '导出Excel'  # 该动作在admin中的显示文字


class WarnAdmin(admin.ModelAdmin):
    list_display = ["city", "status"]
    list_per_page = 30
    list_filter = ["status"]


class CheckAdmin(admin.ModelAdmin):
    list_display = ["city", "date"]
    list_per_page = 30
    list_filter = ["status"]


admin.site.register(AirData, AirDataAdmin)
admin.site.register(Warn, WarnAdmin)
admin.site.register(Check, CheckAdmin)

admin.site.site_title = '操作'
